
package cn.org.rapid_framework.generator.util;

import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

public class GeneratorException extends RuntimeException {

    public List<Exception> exceptions = new ArrayList();

    public GeneratorException() {

	super();
    }

    public GeneratorException(String message, Throwable cause) {

	super(message, cause);
    }

    public GeneratorException(String message) {

	super(message);
    }

    public GeneratorException(Throwable cause) {

	super(cause);
    }

    public List<Exception> getExceptions() {

	return exceptions;
    }

    public void setExceptions(List<Exception> exceptions) {

	if (exceptions==null)
	    throw new NullPointerException("'exceptions' must be not null");
	this.exceptions = exceptions;
    }

    public GeneratorException add(Exception e) {

	exceptions.add(e);
	return this;
    }

    public GeneratorException addAll(List<Exception> excetpions) {

	exceptions.addAll(excetpions);
	return this;
    }

    @Override
    public void printStackTrace() {

	printStackTrace(System.err);
    }

    @Override
    public void printStackTrace(PrintStream s) {

	s.println("GeneratorException:"+getMessage());
	for (Exception e : exceptions) {
	    e.printStackTrace(s);
	}
    }

    @Override
    public void printStackTrace(PrintWriter s) {

	s.println("GeneratorException:"+getMessage());
	for (Exception e : exceptions) {
	    e.printStackTrace(s);
	}
    }

    public String toString() {

	StringWriter out = new StringWriter();
	for (Exception e : exceptions) {
	    out.append(e.toString()+"\n");
	}
	return out.toString();
    }

}
